/**
 * 长整型处理配置
 * 配置需要进行长整型精度处理的字段和API
 */

export interface LongIntConfig {
  // 需要处理的ID字段名称
  idFields: string[];
  // 需要处理的API路径（支持通配符）
  apiPaths: string[];
  // 是否启用全局处理
  enabled: boolean;
  // 是否在控制台输出处理日志
  debug: boolean;
}

export const longIntConfig: LongIntConfig = {
  // 特殊ID字段（只有智能检测无法识别的才需要手动配置）
  idFields: [],

  // 需要处理的API路径（支持通配符 * 匹配）
  apiPaths: [
    '*'  // 匹配所有API，全局处理
  ],

  // 是否启用全局长整型处理
  enabled: true,

  // 是否输出调试日志
  debug: true
};

/**
 * 检查API路径是否需要处理长整型
 */
export function shouldProcessLongInt(apiPath: string): boolean {
  if (!longIntConfig.enabled) {
    return false;
  }

  return longIntConfig.apiPaths.some(pattern => {
    if (pattern === '*') {
      return true;
    }

    // 简单的通配符匹配
    if (pattern.includes('*')) {
      const regex = new RegExp(pattern.replace(/\*/g, '.*'));
      return regex.test(apiPath);
    }

    // 精确匹配
    return apiPath.startsWith(pattern);
  });
}

/**
 * 检查字段是否是ID字段（智能检测，无需手动配置）
 */
export function isIdField(fieldName: string): boolean {
  // 如果配置了具体字段，优先使用配置
  if (longIntConfig.idFields.length > 0) {
    const hasExactMatch = longIntConfig.idFields.some(field => fieldName === field);
    if (hasExactMatch) return true;
  }

  // 智能检测ID字段模式
  const lowerFieldName = fieldName.toLowerCase();
  
  // 常见ID字段模式
  const idPatterns = [
    /^id$/,                    // 精确匹配 "id"
    /.*id$/,                   // 以 "id" 结尾，如 "userId", "orderId"
    /^.*Id$/,                  // 以 "Id" 结尾，如 "userId", "orderId" (驼峰命名)
    /.*_id$/,                  // 以 "_id" 结尾，如 "user_id", "order_id"
    /^id_.*$/,                 // 以 "id_" 开头，如 "id_user", "id_order"
  ];
  
  return idPatterns.some(pattern => pattern.test(lowerFieldName));
}

/**
 * 输出调试日志
 */
export function debugLog(message: string, data?: any): void {
  if (longIntConfig.debug) {
    console.log(`[LongInt] ${message}`, data);
  }
}